const json = {
    deepCopy(data) {
        return JSON.parse(JSON.stringify(data))
    },
    combineAndFlattern(data) {
        // 计算出各种排列组合
        var result = [];
        if (data.length > 0) {
            // 笛卡尔积计算
            var combineResult = this.combine(data);
            combineResult.forEach((combineItem) => {
                if (Array.isArray(combineItem)) {
                    // 多层数组转化为单层数组
                    result.push(this.deepFlattenFn(combineItem));
                } else {
                    var arr = [];
                    arr.push(combineItem);
                    result.push(arr);
                }
            });
            return JSON.parse(JSON.stringify(result));
        } else {
            return [];
        }
    },
    // 笛卡尔积
    combine(arr1, arr2) {
        // 去除第一个元素
        var result = [];
        var temp_arr = arr1;
        var first = temp_arr.splice(0, 1);

        if ((arr2 || null) == null) {
            arr2 = [];
        }

        // 判断是否是第一次进行拼接
        if (arr2.length > 0) {
            for (var i in arr2) {
                for (var k in first[0]) {
                    // result.push(arr2[i] + "," + first[0].value[k]);
                    result.push([
                        arr2[i],
                        first[0][k],
                    ]);
                }
            }
        } else {
            for (var i in first[0]) {
                // result.push(first[0].value[i]);
                result.push(first[0][i]);
            }
        }

        // 递归进行拼接
        if (arr1.length > 0) {
            result = this.combine(arr1, result);
        }

        // 返回最终笛卡尔积
        return result;
    },
    // 多层数组转化为单层数组
    deepFlattenFn(arr) {
        return [].concat(
            ...arr.map((v) => (Array.isArray(v) ? this.deepFlattenFn(v) : v))
        );
    },
}

export default json;